home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1986-04-03 | 12.8 KB | 428 lines |
- 10 REM
- 20 REM Tax Recording Program
- 30 REM
- 40 TERM.WIDTH=80
- 50 CLS:KEY OFF
- 60 TOP%=2000:GOTO 150
- 70 DIM IND$(TOP%)
- 80 FOR I%=1 TO TOP%
- 90 IND$(I%)="^^^^^^^^^^^^^^^^^^^^^^^^^^"
- 100 NEXT
- 110 DEF SEG=&H1FA0
- 120 BLOAD "basort",0
- 130 DEF SEG:DIM X%(9)
- 140 FOR I%=1 TO 9:X%(I%)=0:NEXT:BASORT%=0:RETURN
- 150 LOCATE 1,25:PRINT "Tax Recording Program"
- 160 LOCATE 5,1:PRINT "OPTIONS:"
- 170 LOCATE 7,10:PRINT "1 - Add detail data"
- 180 LOCATE 9,10:PRINT "2 - Add header data"
- 190 LOCATE 11,10:PRINT "3 - Detail Report"
- 200 LOCATE 13,10:PRINT "4 - Summary Report"
- 210 LOCATE 15,10:PRINT "5 - Sort File for Reporting"
- 220 LOCATE 17,10:PRINT "6 - EXIT"
- 230 LOCATE 23,1:PRINT "Enter Option..."
- 240 A$=INKEY$:IF A$="" GOTO 240
- 250 LOCATE 23,1:PRINT SPC(79)
- 260 ON VAL(A$) GOTO 710,1330,1440,2310,2830,390
- 270 LOCATE 25,1:PRINT "Enter a number from 1 to 6 "
- 280 GOTO 240
- 290 REM
- 300 REM OPEN file as output
- 310 REM
- 320 OPEN "a:taxrec.dat" FOR APPEND AS #1
- 330 RETURN
- 340 REM
- 350 REM OPEN file as input
- 360 REM
- 370 OPEN "a:taxrec.dat" FOR INPUT AS #1
- 380 RETURN
- 390 CLS:END
- 400 REM
- 410 REM Heading routine
- 420 REM
- 430 ON VAL(R$) GOTO 450,460,470,480,490,500,510,440,440,440,440,440,440,440,440,440,440,440,440,520,530,540,550,560,570,580,590,600,610,620
- 440 HD$="UNKNOWN ":GOTO 630
- 450 HD$="WAGES ":GOTO 630
- 460 HD$="FEDERAL TAX WITHHELD":GOTO 630
- 470 HD$="CHILD CARE ":GOTO 630
- 480 HD$="SOCIAL SECURITY ":GOTO 630
- 490 HD$="DIVIDENDS ":GOTO 630
- 500 HD$="INTEREST INCOME ":GOTO 630
- 510 HD$="STATE TAX REFUND ":GOTO 630
- 520 HD$="INTEREST PAID ":GOTO 630
- 530 HD$="TAXES ":GOTO 630
- 540 HD$="MEDICAL ":GOTO 630
- 550 HD$="CONTRIBUTIONS ":GOTO 630
- 560 HD$="LOSSES ":GOTO 630
- 570 HD$="Short Term GAIN/LOSS":GOTO 630
- 580 HD$="Long Term GAIN/LOSS ":GOTO 630
- 590 HD$="BUSINESS EXPENSES ":GOTO 630
- 600 HD$="COMPUTER EXPENSES ":GOTO 630
- 610 HD$="INVESTMENT EXPENSES ":GOTO 630
- 620 HD$="STATE TAX WITHHELD ":GOTO 630
- 630 LOCATE 3,23:PRINT HD$
- 640 RETURN
- 650 REM
- 660 REM write to output file
- 670 REM
- 680 PRINT #1,RECNO$;",";"2,";DAT$;",";DESCR$;",";AMT$
- 690 LOCATE 21,1:PRINT "Record added"
- 700 RETURN
- 710 CLS:GOSUB 290 'open output file
- 720 LOCATE 1,25:PRINT "Add Detail Tax Data"
- 730 GOSUB 740:GOTO 1040
- 740 LOCATE 5,1:PRINT "Record Number:"
- 750 LOCATE 6,5:PRINT " 1 - Wages"
- 760 LOCATE 7,5:PRINT " 2 - Federal Tax Withheld"
- 770 LOCATE 8,5:PRINT " 3 - Child Care Expenses"
- 780 LOCATE 9,5:PRINT " 4 - Social Security"
- 790 LOCATE 10,5:PRINT " 5 - Dividends"
- 800 LOCATE 11,5:PRINT " 6 - Interest Income"
- 810 LOCATE 12,5:PRINT " 7 - State Tax Refund"
- 820 LOCATE 6,35:PRINT "20 - Interest Paid"
- 830 LOCATE 7,35:PRINT "21 - Taxes"
- 840 LOCATE 8,35:PRINT "22 - Medical"
- 850 LOCATE 9,35:PRINT "23 - Contributions"
- 860 LOCATE 10,35:PRINT "24 - Losses"
- 870 LOCATE 11,35:PRINT "25 - Short Term Gain/Loss"
- 880 LOCATE 12,35:PRINT "26 - Long Term Gain/Loss"
- 890 LOCATE 13,35:PRINT "27 - Business Expenses"
- 900 LOCATE 14,35:PRINT "28 - Computer Expenses"
- 910 LOCATE 15,35:PRINT "29 - Investment Expenses"
- 920 LOCATE 16,35:PRINT "30 - State Tax Withheld"
- 930 R$=" "
- 940 PROMPT.LINE=5
- 950 LOCATE 5,17:GOSUB 3310
- 960 GOSUB 400
- 970 RECNO$=R$
- 980 IF LEN(R$)>2 THEN LOCATE 23,1:PRINT "Re-enter data":GOTO 940
- 990 IF LEN(R$)=1 THEN RECNO$="0"+R$
- 1000 FOR I=6 TO 21
- 1010 LOCATE I,5:PRINT SPC(79)
- 1020 NEXT
- 1030 RETURN
- 1040 LOCATE 7,1:PRINT "Date:"
- 1050 R$="mm/dd/yy"
- 1060 PROMPT.LINE=7
- 1070 LOCATE 7,17:GOSUB 3310
- 1080 IF VAL(MID$(R$,1,2))>12 THEN LOCATE 23,1:PRINT "Re-enter data":GOTO 1060
- 1090 IF VAL(MID$(R$,4,2))>31 THEN LOCATE 23,1:PRINT "Re-enter data":GOTO 1060
- 1100 IF VAL(MID$(R$,7,2))<82 THEN LOCATE 23,1:PRINT "Re-enter data":GOTO 1060
- 1110 IF LEN(R$)<>8 THEN LOCATE 23,1:PRINT "Re-enter data":GOTO 1060
- 1120 DAT$=R$
- 1130 LOCATE 23,1:PRINT SPC(40)
- 1140 LOCATE 9,1:PRINT "Description:"
- 1150 PROMPT.LINE=9
- 1160 LOCATE 9,17:R$=SPACE$(20):GOSUB 3310
- 1170 DESCR$=R$
- 1180 IF LEN(R$)>13 THEN DESCR$=LEFT$(R$,13)
- 1190 IF LEN(R$)<13 THEN DESCR$=R$+SPACE$(13-LEN(R$))
- 1200 LOCATE 11,1:PRINT "Amount:"
- 1210 PROMPT.LINE=11
- 1220 R$=" "
- 1230 LOCATE 11,17:GOSUB 3310
- 1240 AMT$=R$
- 1250 LOCATE 11,17:PRINT USING "######.##";VAL(AMT$)
- 1260 GOSUB 650 'write to output file
- 1270 LOCATE 21,1:PRINT "Record added"
- 1280 LOCATE 23,1:PRINT "Add another record? (y/n)"
- 1290 A$=INKEY$:IF A$="" GOTO 1290
- 1300 IF A$="y" OR A$="Y" THEN CLS:GOTO 720
- 1310 IF A$="n" OR A$="N" THEN CLOSE:GOTO 10
- 1320 GOTO 1270
- 1330 REM
- 1340 REM Add Header Data Routine
- 1350 REM
- 1360 CLS:GOSUB 290 'open output file
- 1370 LOCATE 1,25:PRINT "Add Header Routine"
- 1380 GOSUB 740 'Display options
- 1390 PRINT #1,RECNO$;",";"1,00000000,";HD$;"," 'write to output file
- 1400 LOCATE 23,1:PRINT "Add another HEADER record? (y/n)"
- 1410 A$=INKEY$:IF A$="" GOTO 1410
- 1420 IF A$="y" OR A$="Y" THEN CLS:GOTO 1370
- 1430 IF A$="n" OR A$="N" THEN CLOSE:GOTO 10
- 1440 REM
- 1450 REM detail report routine
- 1460 REM
- 1470 CLS:PRT=0:SCR=0:SW%=0:SW1%=0:INCOME=0:GOSUB 340 'open file for input
- 1480 PAGE%=1:I=0:SUBTOTAL=0:TOTAL=0
- 1490 LOCATE 1,25:PRINT "Detail Report Routine"
- 1500 LOCATE 5,1:PRINT "Print on Screen or Printer? (s/p)"
- 1510 A$=INKEY$:IF A$="" GOTO 1510
- 1520 IF A$="P" OR A$="p" THEN PRT=1:GOTO 1550
- 1530 IF A$="S" OR A$="s" THEN SCR=1:GOTO 1550
- 1540 GOTO 1500
- 1550 LOCATE 5,1:PRINT SPC(79)
- 1560 IF PRT=1 THEN COLOR 23,0:LOCATE 5,1:PRINT "Please Wait...":COLOR 7,0
- 1570 IF SCR=1 THEN GOSUB 2260
- 1580 IF PRT=1 THEN GOSUB 2140
- 1590 IF EOF(1) GOTO 1860
- 1600 INPUT #1,RECNO%,TYPE%,DAT$,DESCR$,AMT
- 1610 IF SCR=1 AND I=>20 THEN GOSUB 2190
- 1620 IF PRT=1 AND I=>55 THEN GOSUB 2090
- 1630 IF TYPE%=2 GOTO 1780
- 1640 IF TYPE%<>1 GOTO 3400
- 1650 IF RECNO%>19 THEN TOTAL=TOTAL+SUBTOTAL
- 1660 IF RECNO%=20 THEN SW1%=1 ELSE SW1%=0
- 1670 IF SW%=1 AND SCR=1 THEN LOCATE I,1:PRINT ,,,"----------":I=I+1
- 1680 IF SW%=1 AND SCR=1 THEN LOCATE I,1:PRINT ,," Subtotal:";
- 1690 IF SW%=1 AND SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";SUBTOTAL:SUBTOTAL=0:I=I+2
- 1700 IF RECNO%>19 AND SW1%=1 AND SCR=1 THEN LOCATE I,1:PRINT "****************************************************":I=I+1
- 1710 IF SW%=1 AND PRT=1 THEN LPRINT ,,,"----------":I=I+1
- 1720 IF SW%=1 AND PRT=1 THEN LPRINT ,," Subtotal:",;
- 1730 IF SW%=1 AND PRT=1 THEN LPRINT USING "$#####,.##";SUBTOTAL:SUBTOTAL=0:LPRINT:I=I+2
- 1740 IF SW1%=1 AND PRT=1 THEN GOSUB 2090
- 1750 IF SCR=1 THEN LOCATE I,1:PRINT RECNO%,DESCR$:I=I+1
- 1760 IF PRT=1 THEN LPRINT RECNO%,DESCR$:I=I+1
- 1770 GOTO 1590
- 1780 IF SCR=1 THEN LOCATE I,1:PRINT " ",DAT$,DESCR$;
- 1790 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";AMT:I=I+1
- 1800 SUBTOTAL=SUBTOTAL+AMT
- 1810 IF RECNO%=1 OR RECNO%=5 OR RECNO%=6 OR RECNO%=7 THEN INCOME=INCOME+AMT
- 1820 IF PRT=1 THEN LPRINT " ",DAT$,DESCR$,;
- 1830 IF PRT=1 THEN LOCATE ,43:LPRINT USING "$#####,.##";AMT:I=I+1
- 1840 SW%=1
- 1850 GOTO 1590
- 1860 IF SCR=1 AND I>18 THEN GOSUB 2190
- 1870 IF SCR=1 THEN LOCATE I,1:PRINT ,,,"----------":I=I+1
- 1880 IF SCR=1 THEN LOCATE I,1:PRINT ,," Subtotal: ";
- 1890 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";SUBTOTAL:I=I+1
- 1900 IF RECNO%>19 THEN TOTAL=TOTAL+SUBTOTAL
- 1910 IF PRT =1 THEN LPRINT ,,,"----------":I=I+1
- 1920 IF PRT =1 THEN LPRINT ,," Subtotal: ",;
- 1930 IF PRT =1 THEN LOCATE ,43:LPRINT USING "$#####,.##";SUBTOTAL:I=I+1
- 1940 IF SCR=1 THEN LOCATE I,1:PRINT ,,,"==========":I=I+1
- 1950 IF SCR=1 THEN LOCATE I,1:PRINT ,"Total Income:";
- 1960 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";INCOME:I=I+1
- 1970 IF SCR=1 THEN LOCATE I,1:PRINT ,"Total Tax Deductions:";
- 1980 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";TOTAL
- 1990 IF SCR=1 THEN GOTO 2060
- 2000 IF PRT=1 THEN LPRINT:LPRINT ,,,"==========":I=I+2
- 2010 IF PRT=1 THEN LPRINT ,"Total Income:",;
- 2020 IF PRT=1 THEN LPRINT USING "$#####,.##";INCOME:I=I+1
- 2030 IF PRT=1 THEN LPRINT ,"Total Tax Deductions:",;
- 2040 IF PRT=1 THEN LPRINT USING "$#####,.##";TOTAL:I=I+1
- 2050 IF PRT=1 THEN LPRINT CHR$(12)
- 2060 IF SCR=1 THEN LOCATE 23,1:PRINT "Press any key to continue" ELSE GOTO 2080
- 2070 A$=INKEY$:IF A$="" GOTO 2070
- 2080 CLOSE:GOTO 10
- 2090 REM
- 2100 REM Printer Headings Routine
- 2110 REM
- 2120 PAGE%=PAGE%+1
- 2130 LPRINT CHR$(12)
- 2140 LPRINT "Page:";PAGE%;" TAX RECORD REPORT"
- 2150 LPRINT
- 2160 LPRINT "Type ","Date ","Description","Amount"
- 2170 LPRINT:I=4
- 2180 RETURN
- 2190 REM
- 2200 REM Screen Heading Routine
- 2210 REM
- 2220 LOCATE 23,1:PRINT "Press any key to continue..."
- 2230 A$=INKEY$:IF A$="" GOTO 2230
- 2240 PAGE%=PAGE%+1
- 2250 LN%=0
- 2260 CLS
- 2270 LOCATE 1,1:PRINT "Page:";PAGE%;" TAX RECORD REPORT"
- 2280 LOCATE 3,1:PRINT "Type ","Date ","Description","Amount"
- 2290 I=5
- 2300 RETURN
- 2310 REM
- 2320 REM Summary Report Routine
- 2330 REM
- 2340 SUBTOTAL=0:TOTAL=0:INCOME=0:SW1%=0
- 2350 CLS:PRT=0:SCR=0:SW%=0:PAGE%=1:I=0:GOSUB 340 'open input file
- 2360 LOCATE 1,25:PRINT "Summary Report Routine"
- 2370 LOCATE 5,1:PRINT "Print to Screen or Printer? ((s/p)"
- 2380 A$=INKEY$:IF A$="" GOTO 2380
- 2390 IF A$="P" OR A$="p" THEN PRT=1:GOTO 2420
- 2400 IF A$="S" OR A$="s" THEN SCR=1:GOTO 2420
- 2410 GOTO 2370
- 2420 LOCATE 5,1: PRINT SPC(79)
- 2430 IF PRT=1 THEN COLOR 23,0:LOCATE 5,1:PRINT "Please Wait...":COLOR 7,0
- 2440 IF SCR=1 THEN GOSUB 2260
- 2450 IF PRT=1 THEN GOSUB 2140
- 2460 IF EOF(1) GOTO 2640
- 2470 INPUT #1,RECNO%,TYPE%,DAT$,DESCR$,AMT
- 2480 IF SCR=1 AND I=>20 THEN GOSUB 2190
- 2490 IF PRT=1 AND I=>55 THEN GOSUB 2090
- 2500 IF TYPE%=2 GOTO 2610
- 2510 IF RECNO%>19 THEN TOTAL=TOTAL+SUBTOTAL
- 2520 IF SW%=1 AND SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";SUBTOTAL
- 2530 IF RECNO%=20 THEN SW1%=1 ELSE SW1%=0
- 2540 IF RECNO%>19 AND SW1%=1 AND SCR=1 THEN I=I+1:LOCATE I,1:PRINT "****************************************************"
- 2550 IF SCR=1 THEN I=I+2:LOCATE I,1:PRINT RECNO%,DESCR$;
- 2560 IF SW%=1 AND PRT=1 THEN LPRINT USING "$#####,.##";SUBTOTAL
- 2570 SUBTOTAL=0
- 2580 IF SW1%=1 AND PRT=1 THEN GOSUB 2090
- 2590 IF PRT=1 THEN I=I+2:LPRINT :LPRINT RECNO%,DESCR$,;
- 2600 GOTO 2460
- 2610 SUBTOTAL=SUBTOTAL+AMT:SW%=1
- 2620 IF RECNO%=1 OR RECNO%=5 OR RECNO%=6 OR RECNO%=7 THEN INCOME=INCOME+AMT
- 2630 GOTO 2460
- 2640 IF SCR=1 AND I>20 THEN GOSUB 2190
- 2650 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";SUBTOTAL
- 2660 IF PRT=1 THEN LPRINT USING "$#####,.##";SUBTOTAL
- 2670 IF RECNO%>19 THEN TOTAL=TOTAL+SUBTOTAL
- 2680 IF SCR=1 THEN I=I+1:LOCATE I,1:PRINT ,,,"==========":I=I+1
- 2690 IF SCR=1 THEN LOCATE I,1:PRINT ,"Total Income:";
- 2700 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";INCOME
- 2710 IF SCR=1 THEN I=I+1:LOCATE I,1:PRINT ,"Total Tax Deductions:";
- 2720 IF SCR=1 THEN LOCATE I,43:PRINT USING "$#####,.##";TOTAL
- 2730 IF SCR=1 GOTO 2800
- 2740 IF PRT=1 THEN I=I+2:LPRINT:LPRINT ,,,"==========":
- 2750 IF PRT=1 THEN I=I+1:LPRINT ,"Total Income:",,;
- 2760 IF PRT=1 THEN LPRINT USING "$#####,.##";INCOME
- 2770 IF PRT=1 THEN I=I+1:LPRINT ,"Total Tax Deductions:",;
- 2780 IF PRT=1 THEN LPRINT USING "$#####,.##";TOTAL
- 2790 LPRINT CHR$(12)
- 2800 IF SCR=1 THEN LOCATE 23,1:PRINT "Press any key to continue" ELSE GOTO 2820
- 2810 A$=INKEY$:IF A$="" GOTO 2810
- 2820 CLOSE:GOTO 10
- 2830 REM
- 2840 REM Sort File Routine
- 2850 REM
- 2860 CLS
- 2870 GOSUB 70
- 2880 LOCATE 1,25:PRINT "Sort Routine for Tax Record File"
- 2890 LOCATE 5,1:PRINT "Which drive is the backup file to be on? (a/b)"
- 2900 A$=INKEY$:IF A$="" GOTO 2900
- 2910 IF A$="A" OR A$="a" THEN DRV$="a:":GOTO 2940
- 2920 IF A$="B" OR A$="b" THEN DRV$="b:":GOTO 2940
- 2930 GOTO 2900
- 2940 FILEBAK$=DRV$+"taxrec.bak"
- 2950 GOSUB 340 'open file as input
- 2960 OPEN FILEBAK$ FOR OUTPUT AS #2
- 2970 LOCATE 5,1:PRINT "Reading Tax Record File as input... "
- 2980 I=1
- 2990 IF EOF(1) GOTO 3070
- 3000 INPUT #1,RECNO$,TYPE$,DAT$,DESCR$,AMT$
- 3010 IF LEN(RECNO$)=1 THEN RECNO$="0"+RECNO$
- 3020 IF LEN(DAT$)=7 THEN DAT$="0"+DAT$
- 3030 IF LEN(DAT$)<7 THEN DAT$="00000000"
- 3040 IND$(I)=RECNO$+","+TYPE$+","+DAT$+","+DESCR$+","+AMT$
- 3050 I=I+1
- 3060 GOTO 2990
- 3070 LOCATE 5,1:PRINT "Writing Backup File on Drive ";DRV$;" "
- 3080 FOR I%=1 TO I
- 3090 PRINT #2,IND$(I%)
- 3100 NEXT
- 3110 CLOSE #2
- 3120 CLOSE #1
- 3130 KILL "a:taxrec.dat"
- 3140 LOCATE 5,1:PRINT "Sorting the File back into Sequence... "
- 3150 X%(1)=I
- 3160 X%(2)=3
- 3170 X%(3)=0
- 3180 X%(4)=VARPTR(IND$(0))
- 3190 X%(5)=0
- 3200 X%(6)=13
- 3210 X%(0)=VARPTR(X%(1))
- 3220 DEF SEG=&H1FA0
- 3230 CALL BASORT%(X%(0))
- 3240 GOSUB 290
- 3250 LOCATE 5,1:PRINT "Re-Writing the Master Tax File... "
- 3260 FOR I%=1 TO I-1
- 3270 PRINT #1,IND$(I%)
- 3280 NEXT
- 3290 CLOSE #1
- 3300 GOTO 10
- 3310 '===========Dynamic Keyboard Input=============
- 3320 PTR=1
- 3330 START = POS(N) 'beginning of reply area
- 3340 LOCATE ,START,0 're-display reply
- 3350 PRINT R$;SPC(TERM.WIDTH-POS(N));
- 3360 LOCATE ,START+PTR-1,0
- 3370 PRINT MID$(R$,PTR); 'print current reply
- 3380 IF POS(N) < TERM.WIDTH THEN PRINT " ";
- 3390 LOCATE ,START+PTR-1,1 'turn on cursor
- 3400 A$=INKEY$:IF A$="" THEN GOTO 3400 'wait for key press
- 3410 IF LEN(A$) <> 1 THEN GOTO 3830 'special key
- 3420 IF A$ >= CHR$(32) THEN GOTO 3460
- 3430 IF A$=CHR$(8) THEN GOTO 3570 'backspace
- 3440 IF A$=CHR$(13) THEN GOTO 3640 'enter
- 3450 IF A$=CHR$(27) THEN GOTO 3760 'ESC
- 3460 IF LEN(R$)+START >=TERM.WIDTH THEN GOTO 3400 'ignore - line too long
- 3470 IF INSERT THEN GOTO 3530
- 3480 IF PTR > LEN(R$) THEN R$=R$+A$:GOTO 3500 'add to end
- 3490 MID$(R$,PTR)=A$
- 3500 PTR=PTR+1
- 3510 PRINT A$;
- 3520 GOTO 3400
- 3530 R$=LEFT$(R$,PTR-1)+A$+MID$(R$,PTR)
- 3540 PTR=PTR+1
- 3550 PRINT A$;
- 3560 GOTO 3360
- 3570 '------------ Backspace-------------'
- 3580 IF POS(N)=START THEN GOTO 3620 'already at start - delete from left
- 3590 R$=LEFT$(R$,PTR-2)+MID$(R$,PTR) 'delete character
- 3600 PTR=PTR-1
- 3610 GOTO 3360
- 3620 R$=MID$(R$,PTR+1)
- 3630 GOTO 3360
- 3640 '--------------enter--------------
- 3650 REM
- 3660 GOSUB 4240 'cancel insert mode
- 3670 LOCATE PROMPT.LINE-1,1,0 'turn off cursor
- 3680 N=LEN(R$)
- 3690 IF N=0 THEN GOTO 3750
- 3700 WHILE MID$(R$,N,1)=" " AND N > 1 'delete training blanks
- 3710 N=N-1
- 3720 WEND
- 3730 IF N < LEN(R$) THEN R$=LEFT$(R$,N)
- 3740 IF R$=" " THEN R$=""
- 3750 RETURN
- 3760 '-------------escape--------------
- 3770 PTR=1
- 3780 R$=""
- 3790 GOSUB 4240
- 3800 LOCATE ,START,0 'clear reply from screen
- 3810 PRINT SPC(TERM.WIDTH-START);
- 3820 GOTO 3390
- 3830 '--------------special key---------
- 3840 A$=MID$(A$,2,1) 'get key value
- 3850 K=ASC(A$)
- 3860 IF K=71 THEN GOTO 3950 'home
- 3870 IF K=75 THEN GOTO 3990 'left arrow
- 3880 IF K=77 THEN GOTO 4040 'right arrow
- 3890 IF K=79 THEN GOTO 4090 'end
- 3900 IF K=82 THEN GOTO 4130 'insert
- 3910 IF K=83 THEN GOTO 4170 'delete
- 3920 IF K=117 THEN GOTO 4210 'ctrl end
- 3930 LOCATE ,,0 'turn off cursor
- 3940 RETURN
- 3950 '------------- home ---------------'
- 3960 PTR=1
- 3970 GOSUB 4240 'cancel insert mode
- 3980 GOTO 3390
- 3990 '------------ left arrow ---------'
- 4000 IF POS(N)=START THEN GOTO 3400 'ignore - already at start
- 4010 PTR=PTR-1
- 4020 GOSUB 4240
- 4030 GOTO 3390
- 4040 '------------ right arrow --------'
- 4050 IF POS(N)=START+LEN(R$) THEN GOTO 3400 'ignore already at end
- 4060 PTR=PTR+1
- 4070 GOSUB 4240
- 4080 GOTO 3390
- 4090 '------------ end ----------------'
- 4100 PTR=LEN(R$)+1
- 4110 GOSUB 4240 'cancel insert mode
- 4120 GOTO 3360
- 4130 '------------ insert -------------'
- 4140 INSERT=NOT INSERT 'reverse status
- 4150 IF INSERT THEN LOCATE ,,,5,13 ELSE LOCATE ,,,12,13
- 4160 GOTO 3400
- 4170 '------------ delete ------------'
- 4180 R$=LEFT$(R$,PTR-1)+MID$(R$,PTR+1) 'delete character
- 4190 GOSUB 4240 'cancel insert mode
- 4200 GOTO 3360
- 4210 '------------ ctrl end ----------'
- 4220 R$=LEFT$(R$,PTR-1)
- 4230 GOTO 3340
- 4240 '------------ turn off insert mode ---'
- 4250 LOCATE ,,,12,13
- 4260 INSERT=FALSE
- 4270 RETURN
-